Throughout the fifty year history of modern computing much of computer research and development has been focused on producing computers that are faster, smaller, and cheaper while consuming less power and providing more storage. Comparatively little has been spent on research and development in the art/science of programming. In the early days, the cost of building a computer was much greater than the cost of programming it. Today, the converse is true. One may purchase a computer for under $1,000 which is more powerful than one that cost over $1,000,000 forty years ago.
The conventional method of programming is described as a series of steps:                1) PROGRAM SPECIFICATION—Determine the precise arithmetic and logical procedures you want the program to perform, covering all possibilities.        2) FLOW DIAGRAM—Construct a logical flow diagram, which portrays the order of program procedures.        3) WRITING OF PROGRAM—write code in either a higher order language or in assembler or machine language.        4) TESTING—Debug the program by testing in stepwise fashion against known or separately derived data.        5) REMEDIATION—Correct the errors that are uncovered in the testing process.        6) TESTING CYCLE—Iterate through steps 4) and 5) above until no further corrections appear to be necessary.        
Steps 4) through 6) are sometimes referred to as an “alpha” test. A follow-on procedure is to test the program against “live” data to see how the program performs in the environment for which it was written. This is generally referred to as a “beta” test.
Even after the program has undergone extensive testing there may be a set of data and/or circumstances encountered in real life which result in unanticipated possibilities and the program may fail or produce faulty results which may impact other systems and procedures.
Various efforts have addressed the difficult process of programming by building interpreters and compilers and pseudo languages all of which incorporate several computer instructions in their usage. These efforts and others are directed toward one goal. That is to alleviate the programming chore and allow the programmer to write more correct programs faster and more accurately. Of course, any increase in programmer productivity carries with it a consequent reduction in expense.
One of the questionable software practices that have evolved through the years is the complexity of the computer instructions. It seems as though each computer manufacturer feels that bigger is better. That is, the more instructions one allows the programmer, the more choices he has, the better.
In Whirlwind I, the early MIT computer on which was programmed the prototype for our nation's Air Defense System—SAGE (Semi-Automatic Ground Environment), the complete order code was 32 instructions. In Volume 1 of the INTEL Architecture Software Developer's Manual there are listed 50 Data Transfer Instructions, each distinctly different, one from another.
Consider the following examples of the Data Transfer Instruction—
DESCRIPTIONWHIRLWIND ITSTransfer to StorageINTEL PENTIUMMOVMoveCMOVE/CMOVZConditional move if equal/Conditional move if zeroCMOVNE/CMOVNZConditional move if not equal/Conditional move ifnot zeroCMOVA/CMOVNBEConditional move if above/Conditional move if notbelow or equal.CMOVAE/CMOVNBConditional move if above or equal/Conditionalmove if not belowCMOVB/CMOVNAEConditional move if below/Conditional move if notabove or equal.CMOVBE/CMOVNAConditional move if below or equal/Conditionalmove if not above.CMOVG/CMOVNEConditional move if greater/Conditional move ifnot less or equal.CMOVGE/CMOVNLConditional move if greater or equal/Conditionalmove if not less.CMOVL/CMOVNGEConditional move if less/Conditional move if notgreater or equal.CMOVLE/CMOVNGConditional move if less or equal/Conditionalmove if not greater.CMOVCConditional move if carry.CMOVNCConditional move if not carry.CMOVOConditional move if overflow.CMOVNOConditional move if not overflow.CMOVSConditional move if sign (negative)CMOVNSConditional move if not sign (non-negative)CMOVP/CMOVPEConditional move if parity/Conditional move ifparity even.CMOVNP/CMOVPOConditional move if not parity/Conditional move ifparity odd.XCHGExchangeBSWAPByte swap.XADDExchange and add.CMPXCHGCompare and exchange.CMPXCHG8BCompare and exchange 8 bytes.PUSHPush onto stack.POPPop off of stack.PUSHA/PUSHADPush general-purpose registers onto stack.POPA/POPADPop general-purpose registers from stack.INRead from a port.OUTWrite to a port.CWD/CDQConvert word to doubleword/Convert doublewordto quadword.CBW/CWDEConvert byte to word/Convert word to doublewordin EAX register.MOVSXMove and sign extend.MOVZXMove and zero extend.
This is but one example of the complexity to which programming has evolved over the years. In recent years, programming practice has embraced a new way of incorporating proven applications software into original programming. This method, termed Service Oriented Architecture, or SOA, has enabled many new applications to be built rapidly employing old, debugged, proven software from the past. In large organizations with a substantial IT department, it is becoming increasingly popular to standardize on functional subroutines which may be called by individual computer workstations and delivered for inclusion in the writing of a given application. It is also becoming popular to have IT companies such as H-P and IBM provide access to standardized subroutines via the Internet or other means of on-line communication. As is the current custom, the subroutines may be resident on another, remote, computer different from the resident machine wherein the subject program is being written.
Others may argue the advantage or disadvantage of offering so many choices. Suffice it to say that programming has become so complex that one needs help in extracting appropriate instructions from the plethora of possible combinations to perform a given function.
The invention described herein addresses the programming process from a unique perspective which is different from any that have been previously designed and implemented. The adoption and use of this method should lead to increased productivity, thus reduced cost of programming, by enabling the programmer to more quickly produce more accurate programs.